This project is a continuation of the Noise Lab Project from a group in the Boston University GRS MA 675 class in the Fall 2020 semester. This Noise Lab Project was about our client, Erica Walker, wanting to learn more about how to improve her app. Her app is available to volunteers and tracks noise sounds while the users answer some questions about the sources of noise, how it makes them feel, and more. In addition to her app, we utilized data from the Analyze Boston website for social vulnerability in Boston.
In the project previous to this one, my group and I cleaned a bunch of data from Erica as there were a lot of test users. In addition, we looked at the average noise scores and joined the data with the Boston social vulnerability data to produce interactive maps using tmap(). Now, this project will be going one step further by looking at the sources of the noise and to map each ones at different decibel (dB) levels.
In this section, I will talk about the cleaning of the data and what research I have done.
The first step I took was cleaning the data more from before. I looked at the “Sources” column and separated the words to only contain the first word that was present in each cell.
boston_data <- st_read("c7230a7a-4081-4743-b911-e18f66e1beca2020330-1-17gw6be.a4ds.shp")
## Reading layer `c7230a7a-4081-4743-b911-e18f66e1beca2020330-1-17gw6be.a4ds' from data source `C:\Users\Admin\OneDrive\Documents\MSSP\MA_615\Projects\MA615-Final-Project\c7230a7a-4081-4743-b911-e18f66e1beca2020330-1-17gw6be.a4ds.shp' using driver `ESRI Shapefile'
## Simple feature collection with 180 features and 16 fields
## geometry type: MULTIPOLYGON
## dimension: XY
## bbox: xmin: -7924963 ymin: 5195177 xmax: -7895135 ymax: 5221831
## projected CRS: WGS 84 / Pseudo-Mercator
measurements <- read.csv("Measurements_date.csv")
data <- read.csv("data.csv")
# Turn the data frame into sf data
epsg_wgs84 <- 4326
measurements %<>% st_as_sf(coords = c("Longitude", "Latitude")) %>% st_set_crs(epsg_wgs84)
# Make sure that measurements data has the same crs with boston_data
epsg_wgs84 <- 3857
measurements %<>% st_as_sf(coords = c("Longitude", "Latitude")) %>% st_transform(epsg_wgs84)
# Find the points of noise measurements that are in the Boston area
measurements$join <- lengths(st_intersects(measurements, boston_data))
measurements <- subset(measurements, measurements$join == 1)
joindata <- boston_data %>% st_join(measurements)
# Separating the first word in the "Genre" column - we will only use the first word
df_first_word <- separate(measurements, c("Sources"), "Sources")
df <- df_first_word[!df_first_word$Sources == "other", ]
The next step was to research different decibel numbers for different noise sources, assign a decibel number to each source, and group them by the same decibel level. The sources that I used to learn and decide on decibel levels with are below in the “Bibliography” section. At first, people think that noise is measured by distance but it is, in fact, measured on a logarithmic scale to be able to correspond to the way our ears interpret sound pressures. Here is a list of the sources and their assigned decibel levels:
# All
df$fac <- factor(df$Sources, ordered = TRUE, levels = c("quiet", "footsteps", "voices", "neighbor", "restaurant", "hvac", "traffic", "trash", "pickup", "delivery", "dog", "leaf", "car", "music", "trains", "party", "construction", "alarm", "horn", "airplane", "fireworks"))
# 20 dB
df1 <- df[df$Sources == "quiet", ]
df1$fac <- factor(df1$Sources, ordered = TRUE, levels = "quiet")
# 50 dB
df2 <- df[df$Sources == "footsteps", ]
df2$fac <- factor(df2$Sources, ordered = TRUE, levels = "footsteps")
# 60 dB
df3 <- df[df$Sources == c("voices", "neighbor", "restaurant", "hvac"), ]
## Warning in df$Sources == c("voices", "neighbor", "restaurant", "hvac"): longer
## object length is not a multiple of shorter object length
df3$fac <- factor(df3$Sources, ordered = TRUE, levels = c("voices", "neighbor", "restaurant", "hvac"))
# 70 dB
df4 <- df[df$Sources == "traffic", ]
df4$fac <- factor(df4$Sources, ordered = TRUE, levels = "traffic")
# 80 dB
df5 <- df[df$Sources == c("trash", "pickup", "delivery", "dog"), ]
## Warning in df$Sources == c("trash", "pickup", "delivery", "dog"): longer object
## length is not a multiple of shorter object length
df5$fac <- factor(df5$Sources, ordered = TRUE, levels = c("trash", "pickup", "delivery", "dog"))
# 90 dB
df6 <- df[df$Sources == "leaf", ]
df6$fac <- factor(df6$Sources, ordered = TRUE, levels = "leaf")
# 100 dB
df7 <- df[df$Sources == c("car", "music", "trains"), ]
df7$fac <- factor(df7$Sources, ordered = TRUE, levels = c("car", "music", "trains"))
# 110 dB
df8 <- df[df$Sources == c("party", "construction", "alarm", "horn"), ]
## Warning in df$Sources == c("party", "construction", "alarm", "horn"): longer
## object length is not a multiple of shorter object length
df8$fac <- factor(df8$Sources, ordered = TRUE, levels = c("party", "construction", "alarm", "horn"))
# 120 dB
df9 <- df[df$Sources == "airplane", ]
df9$fac <- factor(df9$Sources, ordered = TRUE, levels = "airplane")
# 140 dB
df10 <- df[df$Sources == "fireworks", ]
df10$fac <- factor(df10$Sources, ordered = TRUE, levels = "fireworks")
Below are all of the maps that I have produced. There is one map per decibel that is used in this dataset. The range of decibels are 20-140 dB in increments of ten and missing 30, 40, and 130 dB. I have also provided a short interpretation on each other the maps.
# Setting the tmaps to interactive
tmap_mode('view')
map_fac <- tm_shape(boston_data) +
tm_polygons('MedIllnes', palette = "YlGn", title = "Medical Illness") +
tm_shape(df) +
tm_dots(col = 'fac', size = 0.02, alpha = 0.5, palette = "Accent", title = 'Average Noise Score') +
tm_layout(main.title = 'Boston Vulnerability (Medical Illness) and Average Noise Score (All)')
map_fac
This map above shows where every data point of the average noise score is. As shown on the bottom legend on the right, the dots are divided by source and it is depicted by different colors. All of these maps are interactive. It seems that there are large spots that have a lot of noise data entries in the Fenway area and parts in Roxbury. The rest are scattered around the rest of Boston.
map1 <- tm_shape(boston_data) +
tm_polygons('MedIllnes', palette = "YlGn", title = "Medical Illness") +
tm_shape(df1) +
tm_dots(col = 'fac', size = 1, alpha = 0.5, palette = "red", title = 'Average Noise Score') +
tm_layout(main.title = 'Boston Vulnerability (Medical Illness) and Average Noise Score (20 dB)')
map1
This is the map for the 20 dB level of this dataset. Here, the only source that is 20 decibels is “quiet”. It looks that most of these data points are in the Fenway area. There can be quiet times of the day that people felt that they should record an entry. Every place can usually be quiet at times.
map2 <- tm_shape(boston_data) +
tm_polygons('MedIllnes', palette = "YlGn", title = "Medical Illness") +
tm_shape(df2) +
tm_dots(col = 'fac', size = 1, alpha = 0.5, palette = "red", title = 'Average Noise Score') +
tm_layout(main.title = 'Boston Vulnerability (Medical Illness) and Average Noise Score (50 dB)')
map2
This is the map for the 50 dB level of this dataset. Here, the only source that is 50 decibels is “footsteps”. Most of the data points are located in the Fenway area as well as some in the North End and Charleston. Footsteps are common everywhere, but it seems that people are most irritated by them in that area. There are many businesses there so people might be hearing things like high heels or dress shoes walking around.
map3 <- tm_shape(boston_data) +
tm_polygons('MedIllnes', palette = "YlGn", title = "Medical Illness") +
tm_shape(df3) +
tm_dots(col = 'fac', size = 1, alpha = 0.5, palette = "Dark2", title = 'Average Noise Score') +
tm_layout(main.title = 'Boston Vulnerability (Medical Illness) and Average Noise Score (60 dB)')
map3
This is the map for the 600 dB level of this dataset. Here, the sources that are 60 decibels are “voices”, “neighbor”, “restaurant”, and “hvac” (air conditioners). Voices are the most popular in the Fenway and North End areas. It seems that most of the neighbor noise is coming from the Fenway area or south of that. Restaurant noise is seen more in the Fenway area (there is only one data point for “restaurant”). Hvac noise tends to be more in the Fenway and East Boston areas. These sources are common everywhere but mostly in places that are close together and busy with businesses and activities such as sports games (in Fenway specifically being with many Red Sox games).
map4 <- tm_shape(boston_data) +
tm_polygons('MedIllnes', palette = "YlGn", title = "Medical Illness") +
tm_shape(df4) +
tm_dots(col = 'fac', size = 1, alpha = 0.5, palette = "red", title = 'Average Noise Score') +
tm_layout(main.title = 'Boston Vulnerability (Medical Illness) and Average Noise Score (70 dB)')
map4
This is the map for the 70 dB level of this dataset. Here, the only source that is 70 decibels is “traffic”. As anticipated, traffic is everywhere, especially in a busy, thriving city. Fenway, Allston, Charleston, and the Mattapan areas then to have the most “traffic” data points.
map5 <- tm_shape(boston_data) +
tm_polygons('MedIllnes', palette = "YlGn", title = "Medical Illness") +
tm_shape(df5) +
tm_dots(col = 'fac', size = 1, alpha = 0.5, palette = "Dark2", title = 'Average Noise Score') +
tm_layout(main.title = 'Boston Vulnerability (Medical Illness) and Average Noise Score (80 dB)')
map5
This is the map for the 80 dB level of this dataset. Here, the sources that are 80 decibels are “trash”, “pickup”, “delivery”, and “dog”. Although there are very few data points for each noise at 80 dB, trash and delivery seem to be the only ones in Fenway. Delivery and dog is also in the Roxbury area as well as dog also being in the Nothern Roslindale area. These four sources are very common in all places, not just cities. So, to see that there is not a lot of data points on Boston means that the users might not recognize that it is a noise and would thus neglect to write it down.
map6 <- tm_shape(boston_data) +
tm_polygons('MedIllnes', palette = "YlGn", title = "Medical Illness") +
tm_shape(df6) +
tm_dots(col = 'fac', size = 1, alpha = 0.5, palette = "red", title = 'Average Noise Score') +
tm_layout(main.title = 'Boston Vulnerability (Medical Illness) and Average Noise Score (90 dB)')
map6
This is the map for the 90 dB level of this dataset. Here, the only source that is 90 decibels is “leaf” (leaf blowers). Leaf blowers tend to be recorded in the Fenway, East Boston, and West Roxbury areas. Here, there were only a few instances of leaf blowers because they are only common around fall time as the leaves are falling.
map7 <- tm_shape(boston_data) +
tm_polygons('MedIllnes', palette = "YlGn", title = "Medical Illness") +
tm_shape(df7) +
tm_dots(col = 'fac', size = 1, alpha = 0.5, palette = "Dark2", title = 'Average Noise Score') +
tm_layout(main.title = 'Boston Vulnerability (Medical Illness) and Average Noise Score (100 dB)')
map7
This is the map for the 100 dB level of this dataset. Here, the sources that are 100 decibels are “car” (car music), “music”, and “trains”. Car noise is throughout Boston but mainly in the Fenway, Jamaica Plain, and Roxbury areas. Music is in the general Fenway and Dorchester areas. Trains are in the Back Bay, Fenway, and Dorchester areas. In a city with lots of drivers and public transportation method, these high numbers are common in any large or busy city.
map8 <- tm_shape(boston_data) +
tm_polygons('MedIllnes', palette = "YlGn", title = "Medical Illness") +
tm_shape(df8) +
tm_dots(col = 'fac', size = 1, alpha = 0.5, palette = "Dark2", title = 'Average Noise Score') +
tm_layout(main.title = 'Boston Vulnerability (Medical Illness) and Average Noise Score (110 dB)')
map8
This is the map for the 110 dB level of this dataset. Here, the sources that are 110 decibels are “party”, “construction”, “alarm”, and “horn”. Most party noises are from Fenway as well as alarms. Construction noise is from the Back Bay and Mission Hill areas as well as Allston. Horns are in Back Bay and Fenway areas. All of these sources that are 110 dB are very common in any city.
map9 <- tm_shape(boston_data) +
tm_polygons('MedIllnes', palette = "YlGn", title = "Medical Illness") +
tm_shape(df9) +
tm_dots(col = 'fac', size = 1, alpha = 0.5, palette = "red", title = 'Average Noise Score') +
tm_layout(main.title = 'Boston Vulnerability (Medical Illness) and Average Noise Score (120 dB)')
map9
This is the map for the 120 dB level of this dataset. Here, the only source that is 120 decibels is “airplane”. As seen above, airplane noise is very common in all areas except for Allston and West Roxbury which is far from the airport in East Boston. Airplanes have a large decibel which means that they can be heard over long distances. Especially because Boston Logan International Airport is a major airport.
map10 <- tm_shape(boston_data) +
tm_polygons('MedIllnes', palette = "YlGn", title = "Medical Illness") +
tm_shape(df10) +
tm_dots(col = 'fac', size = 1, alpha = 0.5, palette = "red", title = 'Average Noise Score') +
tm_layout(main.title = 'Boston Vulnerability (Medical Illness) and Average Noise Score (140 dB)')
map10
This is the map for the 140 dB level of this dataset. Here, the only source that is 140 decibels is “fireworks”. Fireworks tend to be in similar places as the previous map for airplanes. It is very interesting to see that there are many data points for fireworks as Massachusetts has a law that fireworks are illegal other than commercial companies lighting them on event days such as the Fourth of July.
Fundamentals of Noise and Sound, 13 July 2020, www.faa.gov/regulations_policies/policy_guidance/noise/basics/.
Noise Comparisons, www.chem.purdue.edu/chemsafety/Training/PPETrain/dblevels.htm.
American Academy of Audiology, https://audiology-web.s3.amazonaws.com/migrated/NoiseChart_Poster-%208.5x11.pdf_5399b289427535.32730330.pdf.